home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / lib / gcc / i486-linux-gnu / 4.3 / include / bmmintrin.h < prev    next >
Encoding:
C/C++ Source or Header  |  2009-03-16  |  42.5 KB  |  1,265 lines

  1. /* Copyright (C) 2007 Free Software Foundation, Inc.
  2.  
  3.    This file is part of GCC.
  4.  
  5.    GCC is free software; you can redistribute it and/or modify
  6.    it under the terms of the GNU General Public License as published by
  7.    the Free Software Foundation; either version 2, or (at your option)
  8.    any later version.
  9.  
  10.    GCC is distributed in the hope that it will be useful,
  11.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.    GNU General Public License for more details.
  14.  
  15.    You should have received a copy of the GNU General Public License
  16.    along with GCC; see the file COPYING.  If not, write to
  17.    the Free Software Foundation, 51 Franklin Street, Fifth Floor,
  18.    Boston, MA 02110-1301, USA.  */
  19.  
  20. /* As a special exception, if you include this header file into source
  21.    files compiled by GCC, this header file does not by itself cause
  22.    the resulting executable to be covered by the GNU General Public
  23.    License.  This exception does not however invalidate any other
  24.    reasons why the executable file might be covered by the GNU General
  25.    Public License.  */
  26.  
  27. #ifndef _BMMINTRIN_H_INCLUDED
  28. #define _BMMINTRIN_H_INCLUDED
  29.  
  30. #ifndef __SSE5__
  31. # error "SSE5 instruction set not enabled"
  32. #else
  33.  
  34. /* We need definitions from the SSE4A, SSE3, SSE2 and SSE header files.  */
  35. #include <ammintrin.h>
  36. #include <mmintrin-common.h>
  37.  
  38. /* Floating point multiply/add type instructions */
  39. extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  40. _mm_macc_ps(__m128 __A, __m128 __B, __m128 __C)
  41. {
  42.   return (__m128) __builtin_ia32_fmaddps ((__v4sf)__A, (__v4sf)__B, (__v4sf)__C);
  43. }
  44.  
  45. extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  46. _mm_macc_pd(__m128d __A, __m128d __B, __m128d __C)
  47. {
  48.   return (__m128d) __builtin_ia32_fmaddpd ((__v2df)__A, (__v2df)__B, (__v2df)__C);
  49. }
  50.  
  51. extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  52. _mm_macc_ss(__m128 __A, __m128 __B, __m128 __C)
  53. {
  54.   return  (__m128) __builtin_ia32_fmaddss ((__v4sf)__A, (__v4sf)__B, (__v4sf)__C);
  55. }
  56.  
  57. extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  58. _mm_macc_sd(__m128d __A, __m128d __B, __m128d __C)
  59. {
  60.   return (__m128d) __builtin_ia32_fmaddsd ((__v2df)__A, (__v2df)__B, (__v2df)__C);
  61. }
  62.  
  63. extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  64. _mm_msub_ps(__m128 __A, __m128 __B, __m128 __C)
  65. {
  66.   return (__m128) __builtin_ia32_fmsubps ((__v4sf)__A, (__v4sf)__B, (__v4sf)__C);
  67. }
  68.  
  69. extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  70. _mm_msub_pd(__m128d __A, __m128d __B, __m128d __C)
  71. {
  72.   return (__m128d) __builtin_ia32_fmsubpd ((__v2df)__A, (__v2df)__B, (__v2df)__C);
  73. }
  74.  
  75. extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  76. _mm_msub_ss(__m128 __A, __m128 __B, __m128 __C)
  77. {
  78.   return (__m128) __builtin_ia32_fmsubss ((__v4sf)__A, (__v4sf)__B, (__v4sf)__C);
  79. }
  80.  
  81. extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  82. _mm_msub_sd(__m128d __A, __m128d __B, __m128d __C)
  83. {
  84.   return (__m128d) __builtin_ia32_fmsubsd ((__v2df)__A, (__v2df)__B, (__v2df)__C);
  85. }
  86.  
  87. extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  88. _mm_nmacc_ps(__m128 __A, __m128 __B, __m128 __C)
  89. {
  90.   return (__m128) __builtin_ia32_fnmaddps ((__v4sf)__A, (__v4sf)__B, (__v4sf)__C);
  91. }
  92.  
  93. extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  94. _mm_nmacc_pd(__m128d __A, __m128d __B, __m128d __C)
  95. {
  96.   return (__m128d) __builtin_ia32_fnmaddpd ((__v2df)__A, (__v2df)__B, (__v2df)__C);
  97. }
  98.  
  99. extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  100. _mm_nmacc_ss(__m128 __A, __m128 __B, __m128 __C)
  101. {
  102.   return (__m128) __builtin_ia32_fnmaddss ((__v4sf)__A, (__v4sf)__B, (__v4sf)__C);
  103. }
  104.  
  105. extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  106. _mm_nmacc_sd(__m128d __A, __m128d __B, __m128d __C)
  107. {
  108.   return (__m128d) __builtin_ia32_fnmaddsd ((__v2df)__A, (__v2df)__B, (__v2df)__C);
  109. }
  110.  
  111. extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  112. _mm_nmsub_ps(__m128 __A, __m128 __B, __m128 __C)
  113. {
  114.   return (__m128) __builtin_ia32_fnmsubps ((__v4sf)__A, (__v4sf)__B, (__v4sf)__C);
  115. }
  116.  
  117. extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  118. _mm_nmsub_pd(__m128d __A, __m128d __B, __m128d __C)
  119. {
  120.   return (__m128d) __builtin_ia32_fnmsubpd ((__v2df)__A, (__v2df)__B, (__v2df)__C);
  121. }
  122.  
  123. extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  124. _mm_nmsub_ss(__m128 __A, __m128 __B, __m128 __C)
  125. {
  126.   return (__m128) __builtin_ia32_fnmsubss ((__v4sf)__A, (__v4sf)__B, (__v4sf)__C);
  127. }
  128.  
  129. extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  130. _mm_nmsub_sd(__m128d __A, __m128d __B, __m128d __C)
  131. {
  132.   return (__m128d) __builtin_ia32_fnmsubsd ((__v2df)__A, (__v2df)__B, (__v2df)__C);
  133. }
  134.  
  135. /* Integer multiply/add intructions. */
  136. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  137. _mm_maccs_epi16(__m128i __A, __m128i __B, __m128i __C)
  138. {
  139.   return (__m128i) __builtin_ia32_pmacssww ((__v8hi)__A,(__v8hi)__B, (__v8hi)__C);
  140. }
  141.  
  142. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  143. _mm_macc_epi16(__m128i __A, __m128i __B, __m128i __C)
  144. {
  145.   return (__m128i) __builtin_ia32_pmacsww ((__v8hi)__A, (__v8hi)__B, (__v8hi)__C);
  146. }
  147.  
  148. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  149. _mm_maccsd_epi16(__m128i __A, __m128i __B, __m128i __C)
  150. {
  151.   return  (__m128i) __builtin_ia32_pmacsswd ((__v8hi)__A, (__v8hi)__B, (__v4si)__C);
  152. }
  153.  
  154. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  155. _mm_maccd_epi16(__m128i __A, __m128i __B, __m128i __C)
  156. {
  157.   return  (__m128i) __builtin_ia32_pmacswd ((__v8hi)__A, (__v8hi)__B, (__v4si)__C);
  158. }
  159.  
  160. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  161. _mm_maccs_epi32(__m128i __A, __m128i __B, __m128i __C)
  162. {
  163.   return  (__m128i) __builtin_ia32_pmacssdd ((__v4si)__A, (__v4si)__B, (__v4si)__C);
  164. }
  165.  
  166. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  167. _mm_macc_epi32(__m128i __A, __m128i __B, __m128i __C)
  168. {
  169.   return  (__m128i) __builtin_ia32_pmacsdd ((__v4si)__A, (__v4si)__B, (__v4si)__C);
  170. }
  171.  
  172. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  173. _mm_maccslo_epi32(__m128i __A, __m128i __B, __m128i __C)
  174. {
  175.   return  (__m128i) __builtin_ia32_pmacssdql ((__v4si)__A, (__v4si)__B, (__v2di)__C);
  176. }
  177.  
  178. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  179. _mm_macclo_epi32(__m128i __A, __m128i __B, __m128i __C)
  180. {
  181.   return  (__m128i) __builtin_ia32_pmacsdql ((__v4si)__A, (__v4si)__B, (__v2di)__C);
  182. }
  183.  
  184. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  185. _mm_maccshi_epi32(__m128i __A, __m128i __B, __m128i __C)
  186. {
  187.   return  (__m128i) __builtin_ia32_pmacssdqh ((__v4si)__A, (__v4si)__B, (__v2di)__C);
  188. }
  189.  
  190. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  191. _mm_macchi_epi32(__m128i __A, __m128i __B, __m128i __C)
  192. {
  193.   return  (__m128i) __builtin_ia32_pmacsdqh ((__v4si)__A, (__v4si)__B, (__v2di)__C);
  194. }
  195.  
  196. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  197. _mm_maddsd_epi16(__m128i __A, __m128i __B, __m128i __C)
  198. {
  199.   return  (__m128i) __builtin_ia32_pmadcsswd ((__v8hi)__A,(__v8hi)__B,(__v4si)__C);
  200. }
  201.  
  202. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  203. _mm_maddd_epi16(__m128i __A, __m128i __B, __m128i __C)
  204. {
  205.   return  (__m128i) __builtin_ia32_pmadcswd ((__v8hi)__A,(__v8hi)__B,(__v4si)__C);
  206. }
  207.  
  208. /* Packed Integer Horizontal Add and Subtract */
  209. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  210. _mm_haddw_epi8(__m128i __A)
  211. {
  212.   return  (__m128i) __builtin_ia32_phaddbw ((__v16qi)__A);
  213. }
  214.  
  215. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  216. _mm_haddd_epi8(__m128i __A)
  217. {
  218.   return  (__m128i) __builtin_ia32_phaddbd ((__v16qi)__A);
  219. }
  220.  
  221. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  222. _mm_haddq_epi8(__m128i __A)
  223. {
  224.   return  (__m128i) __builtin_ia32_phaddbq ((__v16qi)__A);
  225. }
  226.  
  227. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  228. _mm_haddd_epi16(__m128i __A)
  229. {
  230.   return  (__m128i) __builtin_ia32_phaddwd ((__v8hi)__A);
  231. }
  232.  
  233. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  234. _mm_haddq_epi16(__m128i __A)
  235. {
  236.   return  (__m128i) __builtin_ia32_phaddwq ((__v8hi)__A);
  237. }
  238.  
  239. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  240. _mm_haddq_epi32(__m128i __A)
  241. {
  242.   return  (__m128i) __builtin_ia32_phadddq ((__v4si)__A);
  243. }
  244.  
  245. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  246. _mm_haddw_epu8(__m128i __A)
  247. {
  248.   return  (__m128i) __builtin_ia32_phaddubw ((__v16qi)__A);
  249. }
  250.  
  251. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  252. _mm_haddd_epu8(__m128i __A)
  253. {
  254.   return  (__m128i) __builtin_ia32_phaddubd ((__v16qi)__A);
  255. }
  256.  
  257. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  258. _mm_haddq_epu8(__m128i __A)
  259. {
  260.   return  (__m128i) __builtin_ia32_phaddubq ((__v16qi)__A);
  261. }
  262.  
  263. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  264. _mm_haddd_epu16(__m128i __A)
  265. {
  266.   return  (__m128i) __builtin_ia32_phadduwd ((__v8hi)__A);
  267. }
  268.  
  269. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  270. _mm_haddq_epu16(__m128i __A)
  271. {
  272.   return  (__m128i) __builtin_ia32_phadduwq ((__v8hi)__A);
  273. }
  274.  
  275. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  276. _mm_haddq_epu32(__m128i __A)
  277. {
  278.   return  (__m128i) __builtin_ia32_phaddudq ((__v4si)__A);
  279. }
  280.  
  281. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  282. _mm_hsubw_epi8(__m128i __A)
  283. {
  284.   return  (__m128i) __builtin_ia32_phsubbw ((__v16qi)__A);
  285. }
  286.  
  287. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  288. _mm_hsubd_epi16(__m128i __A)
  289. {
  290.   return  (__m128i) __builtin_ia32_phsubwd ((__v8hi)__A);
  291. }
  292.  
  293. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  294. _mm_hsubq_epi32(__m128i __A)
  295. {
  296.   return  (__m128i) __builtin_ia32_phsubdq ((__v4si)__A);
  297. }
  298.  
  299. /* Vector conditional move and permute */
  300. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  301. _mm_cmov_si128(__m128i __A, __m128i __B, __m128i __C)
  302. {
  303.   return  (__m128i) __builtin_ia32_pcmov (__A, __B, __C);
  304. }
  305.  
  306. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  307. _mm_perm_epi8(__m128i __A, __m128i __B, __m128i __C)
  308. {
  309.   return  (__m128i) __builtin_ia32_pperm ((__v16qi)__A, (__v16qi)__B, (__v16qi)__C);
  310. }
  311.  
  312. extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  313. _mm_perm_ps(__m128 __A, __m128 __B, __m128i __C)
  314. {
  315.   return  (__m128) __builtin_ia32_permps ((__m128)__A, (__m128)__B, (__v16qi)__C);
  316. }
  317.  
  318. extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  319. _mm_perm_pd(__m128d __A, __m128d __B, __m128i __C)
  320. {
  321.   return  (__m128d) __builtin_ia32_permpd ((__m128d)__A, (__m128d)__B, (__v16qi)__C);
  322. }
  323.  
  324. /* Packed Integer Rotates and Shifts */
  325.  
  326. /* Rotates - Non-Immediate form */
  327. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  328. _mm_rot_epi8(__m128i __A,  __m128i __B)
  329. {
  330.   return  (__m128i) __builtin_ia32_protb ((__v16qi)__A, (__v16qi)__B);
  331. }
  332.  
  333. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  334. _mm_rot_epi16(__m128i __A,  __m128i __B)
  335. {
  336.   return  (__m128i) __builtin_ia32_protw ((__v8hi)__A, (__v8hi)__B);
  337. }
  338.  
  339. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  340. _mm_rot_epi32(__m128i __A,  __m128i __B)
  341. {
  342.   return  (__m128i) __builtin_ia32_protd ((__v4si)__A, (__v4si)__B);
  343. }
  344.  
  345. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  346. _mm_rot_epi64(__m128i __A,  __m128i __B)
  347. {
  348.   return (__m128i)  __builtin_ia32_protq ((__v2di)__A, (__v2di)__B);
  349. }
  350.  
  351.  
  352. /* Rotates - Immediate form */
  353. #ifdef __OPTIMIZE__
  354. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  355. _mm_roti_epi8(__m128i __A, const int __B)
  356. {
  357.   return  (__m128i) __builtin_ia32_protbi ((__v16qi)__A, __B);
  358. }
  359.  
  360. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  361. _mm_roti_epi16(__m128i __A, const int __B)
  362. {
  363.   return  (__m128i) __builtin_ia32_protwi ((__v8hi)__A, __B);
  364. }
  365.  
  366. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  367. _mm_roti_epi32(__m128i __A, const int __B)
  368. {
  369.   return  (__m128i) __builtin_ia32_protdi ((__v4si)__A, __B);
  370. }
  371.  
  372. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  373. _mm_roti_epi64(__m128i __A, const int __B)
  374. {
  375.   return  (__m128i) __builtin_ia32_protqi ((__v2di)__A, __B);
  376. }
  377. #else
  378. #define _mm_roti_epi8(A, N) \
  379.   ((__m128i) __builtin_ia32_protbi ((__v16qi)(__m128i)(A), (int)(N)))
  380. #define _mm_roti_epi16(A, N) \
  381.   ((__m128i) __builtin_ia32_protwi ((__v8hi)(__m128i)(A), (int)(N)))
  382. #define _mm_roti_epi32(A, N) \
  383.   ((__m128i) __builtin_ia32_protdi ((__v4si)(__m128i)(A), (int)(N)))
  384. #define _mm_roti_epi64(A, N) \
  385.   ((__m128i) __builtin_ia32_protqi ((__v2di)(__m128i)(A), (int)(N)))
  386. #endif
  387.  
  388. /* pshl */
  389.  
  390. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  391. _mm_shl_epi8(__m128i __A,  __m128i __B)
  392. {
  393.   return  (__m128i) __builtin_ia32_pshlb ((__v16qi)__A, (__v16qi)__B);
  394. }
  395.  
  396. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  397. _mm_shl_epi16(__m128i __A,  __m128i __B)
  398. {
  399.   return  (__m128i) __builtin_ia32_pshlw ((__v8hi)__A, (__v8hi)__B);
  400. }
  401.  
  402. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  403. _mm_shl_epi32(__m128i __A,  __m128i __B)
  404. {
  405.   return  (__m128i) __builtin_ia32_pshld ((__v4si)__A, (__v4si)__B);
  406. }
  407.  
  408. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  409. _mm_shl_epi64(__m128i __A,  __m128i __B)
  410. {
  411.   return  (__m128i) __builtin_ia32_pshlq ((__v2di)__A, (__v2di)__B);
  412. }
  413.  
  414. /* psha */
  415. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  416. _mm_sha_epi8(__m128i __A,  __m128i __B)
  417. {
  418.   return  (__m128i) __builtin_ia32_pshab ((__v16qi)__A, (__v16qi)__B);
  419. }
  420.  
  421. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  422. _mm_sha_epi16(__m128i __A,  __m128i __B)
  423. {
  424.   return  (__m128i) __builtin_ia32_pshaw ((__v8hi)__A, (__v8hi)__B);
  425. }
  426.  
  427. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  428. _mm_sha_epi32(__m128i __A,  __m128i __B)
  429. {
  430.   return  (__m128i) __builtin_ia32_pshad ((__v4si)__A, (__v4si)__B);
  431. }
  432.  
  433. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  434. _mm_sha_epi64(__m128i __A,  __m128i __B)
  435. {
  436.   return  (__m128i) __builtin_ia32_pshaq ((__v2di)__A, (__v2di)__B);
  437. }
  438.  
  439. /* Compare and Predicate Generation */
  440.  
  441. /* com (floating point, packed single) */
  442. extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  443. _mm_comeq_ps(__m128 __A, __m128 __B)
  444. {
  445.   return  (__m128) __builtin_ia32_comeqps ((__v4sf)__A, (__v4sf)__B);
  446. }
  447.  
  448. extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  449. _mm_comlt_ps(__m128 __A, __m128 __B)
  450. {
  451.   return  (__m128) __builtin_ia32_comltps ((__v4sf)__A, (__v4sf)__B);
  452. }
  453.  
  454. extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  455. _mm_comle_ps(__m128 __A, __m128 __B)
  456. {
  457.   return (__m128) __builtin_ia32_comleps ((__v4sf)__A, (__v4sf)__B);
  458. }
  459.  
  460. extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  461. _mm_comunord_ps(__m128 __A, __m128 __B)
  462. {
  463.   return (__m128) __builtin_ia32_comunordps ((__v4sf)__A, (__v4sf)__B);
  464. }
  465.  
  466. extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  467. _mm_comneq_ps(__m128 __A, __m128 __B)
  468. {
  469.   return (__m128) __builtin_ia32_comuneqps ((__v4sf)__A, (__v4sf)__B);
  470. }
  471.  
  472. extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  473. _mm_comnlt_ps(__m128 __A, __m128 __B)
  474. {
  475.   return (__m128) __builtin_ia32_comunltps ((__v4sf)__A, (__v4sf)__B);
  476. }
  477.  
  478. extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  479. _mm_comnle_ps(__m128 __A, __m128 __B)
  480. {
  481.   return (__m128)  __builtin_ia32_comunleps ((__v4sf)__A, (__v4sf)__B);
  482. }
  483.  
  484.  
  485. extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  486. _mm_comord_ps(__m128 __A, __m128 __B)
  487. {
  488.   return (__m128) __builtin_ia32_comordps ((__v4sf)__A, (__v4sf)__B);
  489. }
  490.  
  491.  
  492. extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  493. _mm_comueq_ps(__m128 __A, __m128 __B)
  494. {
  495.   return (__m128) __builtin_ia32_comueqps ((__v4sf)__A, (__v4sf)__B);
  496. }
  497.  
  498. extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  499. _mm_comnge_ps(__m128 __A, __m128 __B)
  500. {
  501.   return (__m128) __builtin_ia32_comungeps ((__v4sf)__A, (__v4sf)__B);
  502. }
  503.  
  504. extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  505. _mm_comngt_ps(__m128 __A, __m128 __B)
  506. {
  507.   return (__m128) __builtin_ia32_comungtps ((__v4sf)__A, (__v4sf)__B);
  508. }
  509.  
  510. extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  511. _mm_comfalse_ps(__m128 __A, __m128 __B)
  512. {
  513.   return (__m128) __builtin_ia32_comfalseps ((__v4sf)__A, (__v4sf)__B);
  514. }
  515.  
  516. extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  517. _mm_comoneq_ps(__m128 __A, __m128 __B)
  518. {
  519.   return (__m128) __builtin_ia32_comneqps ((__v4sf)__A, (__v4sf)__B);
  520. }
  521.  
  522. extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  523. _mm_comge_ps(__m128 __A, __m128 __B)
  524. {
  525.   return (__m128) __builtin_ia32_comgeps ((__v4sf)__A, (__v4sf)__B);
  526. }
  527.  
  528. extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  529. _mm_comgt_ps(__m128 __A, __m128 __B)
  530. {
  531.   return (__m128) __builtin_ia32_comgtps ((__v4sf)__A, (__v4sf)__B);
  532. }
  533.  
  534. extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  535. _mm_comtrue_ps(__m128 __A, __m128 __B)
  536. {
  537.   return (__m128) __builtin_ia32_comtrueps ((__v4sf)__A, (__v4sf)__B);
  538. }
  539.  
  540. /* com (floating point, packed double) */
  541.  
  542. extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  543. _mm_comeq_pd(__m128d __A, __m128d __B)
  544. {
  545.   return (__m128d) __builtin_ia32_comeqpd ((__v2df)__A, (__v2df)__B);
  546. }
  547.  
  548. extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  549. _mm_comlt_pd(__m128d __A, __m128d __B)
  550. {
  551.   return (__m128d) __builtin_ia32_comltpd ((__v2df)__A, (__v2df)__B);
  552. }
  553.  
  554. extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  555. _mm_comle_pd(__m128d __A, __m128d __B)
  556. {
  557.   return (__m128d) __builtin_ia32_comlepd ((__v2df)__A, (__v2df)__B);
  558. }
  559.  
  560. extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  561. _mm_comunord_pd(__m128d __A, __m128d __B)
  562. {
  563.   return (__m128d) __builtin_ia32_comunordpd ((__v2df)__A, (__v2df)__B);
  564. }
  565.  
  566. extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  567. _mm_comneq_pd(__m128d __A, __m128d __B)
  568. {
  569.   return (__m128d) __builtin_ia32_comuneqpd ((__v2df)__A, (__v2df)__B);
  570. }
  571.  
  572. extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  573. _mm_comnlt_pd(__m128d __A, __m128d __B)
  574. {
  575.   return (__m128d) __builtin_ia32_comunltpd ((__v2df)__A, (__v2df)__B);
  576. }
  577.  
  578. extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  579. _mm_comnle_pd(__m128d __A, __m128d __B)
  580. {
  581.   return (__m128d) __builtin_ia32_comunlepd ((__v2df)__A, (__v2df)__B);
  582. }
  583.  
  584.  
  585. extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  586. _mm_comord_pd(__m128d __A, __m128d __B)
  587. {
  588.   return (__m128d) __builtin_ia32_comordpd ((__v2df)__A, (__v2df)__B);
  589. }
  590.  
  591. extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  592. _mm_comueq_pd(__m128d __A, __m128d __B)
  593. {
  594.   return (__m128d) __builtin_ia32_comueqpd ((__v2df)__A, (__v2df)__B);
  595. }
  596.  
  597. extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  598. _mm_comnge_pd(__m128d __A, __m128d __B)
  599. {
  600.   return (__m128d) __builtin_ia32_comungepd ((__v2df)__A, (__v2df)__B);
  601. }
  602.  
  603. extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  604. _mm_comngt_pd(__m128d __A, __m128d __B)
  605. {
  606.   return (__m128d) __builtin_ia32_comungtpd ((__v2df)__A, (__v2df)__B);
  607. }
  608.  
  609. extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  610. _mm_comfalse_pd(__m128d __A, __m128d __B)
  611. {
  612.   return (__m128d) __builtin_ia32_comfalsepd ((__v2df)__A, (__v2df)__B);
  613. }
  614.  
  615. extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  616. _mm_comoneq_pd(__m128d __A, __m128d __B)
  617. {
  618.   return (__m128d) __builtin_ia32_comneqpd ((__v2df)__A, (__v2df)__B);
  619. }
  620.  
  621. extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  622. _mm_comge_pd(__m128d __A, __m128d __B)
  623. {
  624.   return (__m128d) __builtin_ia32_comgepd ((__v2df)__A, (__v2df)__B);
  625. }
  626.  
  627. extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  628. _mm_comgt_pd(__m128d __A, __m128d __B)
  629. {
  630.   return (__m128d) __builtin_ia32_comgtpd ((__v2df)__A, (__v2df)__B);
  631. }
  632.  
  633. extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  634. _mm_comtrue_pd(__m128d __A, __m128d __B)
  635. {
  636.   return (__m128d) __builtin_ia32_comtruepd ((__v2df)__A, (__v2df)__B);
  637. }
  638.  
  639. /* com (floating point, scalar single) */
  640. extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  641. _mm_comeq_ss(__m128 __A, __m128 __B)
  642. {
  643.   return (__m128)  __builtin_ia32_comeqss ((__v4sf)__A, (__v4sf)__B);
  644. }
  645.  
  646. extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  647. _mm_comlt_ss(__m128 __A, __m128 __B)
  648. {
  649.   return (__m128) __builtin_ia32_comltss ((__v4sf)__A, (__v4sf)__B);
  650. }
  651.  
  652. extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  653. _mm_comle_ss(__m128 __A, __m128 __B)
  654. {
  655.   return (__m128) __builtin_ia32_comless ((__v4sf)__A, (__v4sf)__B);
  656. }
  657.  
  658. extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  659. _mm_comunord_ss(__m128 __A, __m128 __B)
  660. {
  661.   return (__m128) __builtin_ia32_comunordss ((__v4sf)__A, (__v4sf)__B);
  662. }
  663.  
  664. extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  665. _mm_comneq_ss(__m128 __A, __m128 __B)
  666. {
  667.   return (__m128) __builtin_ia32_comuneqss ((__v4sf)__A, (__v4sf)__B);
  668. }
  669.  
  670. extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  671. _mm_comnlt_ss(__m128 __A, __m128 __B)
  672. {
  673.   return (__m128) __builtin_ia32_comunltss ((__v4sf)__A, (__v4sf)__B);
  674. }
  675.  
  676. extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  677. _mm_comnle_ss(__m128 __A, __m128 __B)
  678. {
  679.   return (__m128) __builtin_ia32_comunless ((__v4sf)__A, (__v4sf)__B);
  680. }
  681.  
  682.  
  683. extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  684. _mm_comord_ss(__m128 __A, __m128 __B)
  685. {
  686.   return (__m128) __builtin_ia32_comordss ((__v4sf)__A, (__v4sf)__B);
  687. }
  688.  
  689. extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  690. _mm_comueq_ss(__m128 __A, __m128 __B)
  691. {
  692.   return (__m128) __builtin_ia32_comueqss ((__v4sf)__A, (__v4sf)__B);
  693. }
  694.  
  695. extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  696. _mm_comnge_ss(__m128 __A, __m128 __B)
  697. {
  698.   return (__m128) __builtin_ia32_comungess ((__v4sf)__A, (__v4sf)__B);
  699. }
  700.  
  701. extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  702. _mm_comngt_ss(__m128 __A, __m128 __B)
  703. {
  704.   return (__m128) __builtin_ia32_comungtss ((__v4sf)__A, (__v4sf)__B);
  705. }
  706.  
  707. extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  708. _mm_comfalse_ss(__m128 __A, __m128 __B)
  709. {
  710.   return (__m128) __builtin_ia32_comfalsess ((__v4sf)__A, (__v4sf)__B);
  711. }
  712.  
  713. extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  714. _mm_comoneq_ss(__m128 __A, __m128 __B)
  715. {
  716.   return (__m128) __builtin_ia32_comneqss ((__v4sf)__A, (__v4sf)__B);
  717. }
  718.  
  719. extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  720. _mm_comge_ss(__m128 __A, __m128 __B)
  721. {
  722.   return (__m128) __builtin_ia32_comgess ((__v4sf)__A, (__v4sf)__B);
  723. }
  724.  
  725. extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  726. _mm_comgt_ss(__m128 __A, __m128 __B)
  727. {
  728.   return (__m128) __builtin_ia32_comgtss ((__v4sf)__A, (__v4sf)__B);
  729. }
  730.  
  731. extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  732. _mm_comtrue_ss(__m128 __A, __m128 __B)
  733. {
  734.   return (__m128) __builtin_ia32_comtruess ((__v4sf)__A, (__v4sf)__B);
  735. }
  736.  
  737. /* com (floating point, scalar double) */
  738.  
  739. extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  740. _mm_comeq_sd(__m128d __A, __m128d __B)
  741. {
  742.   return (__m128d) __builtin_ia32_comeqsd ((__v2df)__A, (__v2df)__B);
  743. }
  744.  
  745. extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  746. _mm_comlt_sd(__m128d __A, __m128d __B)
  747. {
  748.   return (__m128d) __builtin_ia32_comltsd ((__v2df)__A, (__v2df)__B);
  749. }
  750.  
  751. extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  752. _mm_comle_sd(__m128d __A, __m128d __B)
  753. {
  754.   return (__m128d) __builtin_ia32_comlesd ((__v2df)__A, (__v2df)__B);
  755. }
  756.  
  757. extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  758. _mm_comunord_sd(__m128d __A, __m128d __B)
  759. {
  760.   return (__m128d) __builtin_ia32_comunordsd ((__v2df)__A, (__v2df)__B);
  761. }
  762.  
  763. extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  764. _mm_comneq_sd(__m128d __A, __m128d __B)
  765. {
  766.   return (__m128d) __builtin_ia32_comuneqsd ((__v2df)__A, (__v2df)__B);
  767. }
  768.  
  769. extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  770. _mm_comnlt_sd(__m128d __A, __m128d __B)
  771. {
  772.   return (__m128d) __builtin_ia32_comunltsd ((__v2df)__A, (__v2df)__B);
  773. }
  774.  
  775. extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  776. _mm_comnle_sd(__m128d __A, __m128d __B)
  777. {
  778.   return (__m128d) __builtin_ia32_comunlesd ((__v2df)__A, (__v2df)__B);
  779. }
  780.  
  781.  
  782. extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  783. _mm_comord_sd(__m128d __A, __m128d __B)
  784. {
  785.   return (__m128d) __builtin_ia32_comordsd ((__v2df)__A, (__v2df)__B);
  786. }
  787.  
  788. extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  789. _mm_comueq_sd(__m128d __A, __m128d __B)
  790. {
  791.   return (__m128d) __builtin_ia32_comueqsd ((__v2df)__A, (__v2df)__B);
  792. }
  793.  
  794. extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  795. _mm_comnge_sd(__m128d __A, __m128d __B)
  796. {
  797.   return (__m128d) __builtin_ia32_comungesd ((__v2df)__A, (__v2df)__B);
  798. }
  799.  
  800. extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  801. _mm_comngt_sd(__m128d __A, __m128d __B)
  802. {
  803.   return (__m128d) __builtin_ia32_comungtsd ((__v2df)__A, (__v2df)__B);
  804. }
  805.  
  806. extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  807. _mm_comfalse_sd(__m128d __A, __m128d __B)
  808. {
  809.   return (__m128d) __builtin_ia32_comfalsesd ((__v2df)__A, (__v2df)__B);
  810. }
  811.  
  812. extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  813. _mm_comoneq_sd(__m128d __A, __m128d __B)
  814. {
  815.   return (__m128d) __builtin_ia32_comneqsd ((__v2df)__A, (__v2df)__B);
  816. }
  817.  
  818. extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  819. _mm_comge_sd(__m128d __A, __m128d __B)
  820. {
  821.   return (__m128d) __builtin_ia32_comgesd ((__v2df)__A, (__v2df)__B);
  822. }
  823.  
  824. extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  825. _mm_comgt_sd(__m128d __A, __m128d __B)
  826. {
  827.   return (__m128d) __builtin_ia32_comgtsd ((__v2df)__A, (__v2df)__B);
  828. }
  829.  
  830. extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  831. _mm_comtrue_sd(__m128d __A, __m128d __B)
  832. {
  833.   return (__m128d) __builtin_ia32_comtruesd ((__v2df)__A, (__v2df)__B);
  834. }
  835.  
  836.  
  837. /*pcom (integer, unsinged bytes) */
  838.  
  839. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  840. _mm_comlt_epu8(__m128i __A, __m128i __B)
  841. {
  842.   return (__m128i) __builtin_ia32_pcomltub ((__v16qi)__A, (__v16qi)__B);
  843. }
  844.  
  845. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  846. _mm_comle_epu8(__m128i __A, __m128i __B)
  847. {
  848.   return (__m128i) __builtin_ia32_pcomleub ((__v16qi)__A, (__v16qi)__B);
  849. }
  850.  
  851. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  852. _mm_comgt_epu8(__m128i __A, __m128i __B)
  853. {
  854.   return (__m128i) __builtin_ia32_pcomgtub ((__v16qi)__A, (__v16qi)__B);
  855. }
  856.  
  857. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  858. _mm_comge_epu8(__m128i __A, __m128i __B)
  859. {
  860.   return (__m128i) __builtin_ia32_pcomgeub ((__v16qi)__A, (__v16qi)__B);
  861. }
  862.  
  863. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  864. _mm_comeq_epu8(__m128i __A, __m128i __B)
  865. {
  866.   return (__m128i) __builtin_ia32_pcomequb ((__v16qi)__A, (__v16qi)__B);
  867. }
  868.  
  869. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  870. _mm_comneq_epu8(__m128i __A, __m128i __B)
  871. {
  872.   return (__m128i) __builtin_ia32_pcomnequb ((__v16qi)__A, (__v16qi)__B);
  873. }
  874.  
  875. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  876. _mm_comfalse_epu8(__m128i __A, __m128i __B)
  877. {
  878.   return (__m128i) __builtin_ia32_pcomfalseub ((__v16qi)__A, (__v16qi)__B);
  879. }
  880.  
  881. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  882. _mm_comtrue_epu8(__m128i __A, __m128i __B)
  883. {
  884.   return (__m128i) __builtin_ia32_pcomtrueub ((__v16qi)__A, (__v16qi)__B);
  885. }
  886.  
  887. /*pcom (integer, unsinged words) */
  888.  
  889. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  890. _mm_comlt_epu16(__m128i __A, __m128i __B)
  891. {
  892.   return (__m128i) __builtin_ia32_pcomltuw ((__v8hi)__A, (__v8hi)__B);
  893. }
  894.  
  895. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  896. _mm_comle_epu16(__m128i __A, __m128i __B)
  897. {
  898.   return (__m128i) __builtin_ia32_pcomleuw ((__v8hi)__A, (__v8hi)__B);
  899. }
  900.  
  901. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  902. _mm_comgt_epu16(__m128i __A, __m128i __B)
  903. {
  904.   return (__m128i) __builtin_ia32_pcomgtuw ((__v8hi)__A, (__v8hi)__B);
  905. }
  906.  
  907. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  908. _mm_comge_epu16(__m128i __A, __m128i __B)
  909. {
  910.   return (__m128i) __builtin_ia32_pcomgeuw ((__v8hi)__A, (__v8hi)__B);
  911. }
  912.  
  913. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  914. _mm_comeq_epu16(__m128i __A, __m128i __B)
  915. {
  916.   return (__m128i) __builtin_ia32_pcomequw ((__v8hi)__A, (__v8hi)__B);
  917. }
  918.  
  919. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  920. _mm_comneq_epu16(__m128i __A, __m128i __B)
  921. {
  922.   return (__m128i) __builtin_ia32_pcomnequw ((__v8hi)__A, (__v8hi)__B);
  923. }
  924.  
  925. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  926. _mm_comfalse_epu16(__m128i __A, __m128i __B)
  927. {
  928.   return (__m128i) __builtin_ia32_pcomfalseuw ((__v8hi)__A, (__v8hi)__B);
  929. }
  930.  
  931. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  932. _mm_comtrue_epu16(__m128i __A, __m128i __B)
  933. {
  934.   return (__m128i) __builtin_ia32_pcomtrueuw ((__v8hi)__A, (__v8hi)__B);
  935. }
  936.  
  937. /*pcom (integer, unsinged double words) */
  938.  
  939. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  940. _mm_comlt_epu32(__m128i __A, __m128i __B)
  941. {
  942.   return (__m128i) __builtin_ia32_pcomltud ((__v4si)__A, (__v4si)__B);
  943. }
  944.  
  945. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  946. _mm_comle_epu32(__m128i __A, __m128i __B)
  947. {
  948.   return (__m128i) __builtin_ia32_pcomleud ((__v4si)__A, (__v4si)__B);
  949. }
  950.  
  951. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  952. _mm_comgt_epu32(__m128i __A, __m128i __B)
  953. {
  954.   return (__m128i) __builtin_ia32_pcomgtud ((__v4si)__A, (__v4si)__B);
  955. }
  956.  
  957. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  958. _mm_comge_epu32(__m128i __A, __m128i __B)
  959. {
  960.   return (__m128i) __builtin_ia32_pcomgeud ((__v4si)__A, (__v4si)__B);
  961. }
  962.  
  963. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  964. _mm_comeq_epu32(__m128i __A, __m128i __B)
  965. {
  966.   return (__m128i) __builtin_ia32_pcomequd ((__v4si)__A, (__v4si)__B);
  967. }
  968.  
  969. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  970. _mm_comneq_epu32(__m128i __A, __m128i __B)
  971. {
  972.   return (__m128i) __builtin_ia32_pcomnequd ((__v4si)__A, (__v4si)__B);
  973. }
  974.  
  975. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  976. _mm_comfalse_epu32(__m128i __A, __m128i __B)
  977. {
  978.   return (__m128i) __builtin_ia32_pcomfalseud ((__v4si)__A, (__v4si)__B);
  979. }
  980.  
  981. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  982. _mm_comtrue_epu32(__m128i __A, __m128i __B)
  983. {
  984.   return (__m128i) __builtin_ia32_pcomtrueud ((__v4si)__A, (__v4si)__B);
  985. }
  986.  
  987. /*pcom (integer, unsinged quad words) */
  988.  
  989. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  990. _mm_comlt_epu64(__m128i __A, __m128i __B)
  991. {
  992.   return (__m128i) __builtin_ia32_pcomltuq ((__v2di)__A, (__v2di)__B);
  993. }
  994.  
  995. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  996. _mm_comle_epu64(__m128i __A, __m128i __B)
  997. {
  998.   return (__m128i) __builtin_ia32_pcomleuq ((__v2di)__A, (__v2di)__B);
  999. }
  1000.  
  1001. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  1002. _mm_comgt_epu64(__m128i __A, __m128i __B)
  1003. {
  1004.   return (__m128i) __builtin_ia32_pcomgtuq ((__v2di)__A, (__v2di)__B);
  1005. }
  1006.  
  1007. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  1008. _mm_comge_epu64(__m128i __A, __m128i __B)
  1009. {
  1010.   return (__m128i) __builtin_ia32_pcomgeuq ((__v2di)__A, (__v2di)__B);
  1011. }
  1012.  
  1013. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  1014. _mm_comeq_epu64(__m128i __A, __m128i __B)
  1015. {
  1016.   return (__m128i) __builtin_ia32_pcomequq ((__v2di)__A, (__v2di)__B);
  1017. }
  1018.  
  1019. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  1020. _mm_comneq_epu64(__m128i __A, __m128i __B)
  1021. {
  1022.   return (__m128i) __builtin_ia32_pcomnequq ((__v2di)__A, (__v2di)__B);
  1023. }
  1024.  
  1025. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  1026. _mm_comfalse_epu64(__m128i __A, __m128i __B)
  1027. {
  1028.   return (__m128i) __builtin_ia32_pcomfalseuq ((__v2di)__A, (__v2di)__B);
  1029. }
  1030.  
  1031. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  1032. _mm_comtrue_epu64(__m128i __A, __m128i __B)
  1033. {
  1034.   return (__m128i) __builtin_ia32_pcomtrueuq ((__v2di)__A, (__v2di)__B);
  1035. }
  1036.  
  1037. /*pcom (integer, signed bytes) */
  1038.  
  1039. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  1040. _mm_comlt_epi8(__m128i __A, __m128i __B)
  1041. {
  1042.   return (__m128i) __builtin_ia32_pcomltb ((__v16qi)__A, (__v16qi)__B);
  1043. }
  1044.  
  1045. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  1046. _mm_comle_epi8(__m128i __A, __m128i __B)
  1047. {
  1048.   return (__m128i) __builtin_ia32_pcomleb ((__v16qi)__A, (__v16qi)__B);
  1049. }
  1050.  
  1051. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  1052. _mm_comgt_epi8(__m128i __A, __m128i __B)
  1053. {
  1054.   return (__m128i) __builtin_ia32_pcomgtb ((__v16qi)__A, (__v16qi)__B);
  1055. }
  1056.  
  1057. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  1058. _mm_comge_epi8(__m128i __A, __m128i __B)
  1059. {
  1060.   return (__m128i) __builtin_ia32_pcomgeb ((__v16qi)__A, (__v16qi)__B);
  1061. }
  1062.  
  1063. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  1064. _mm_comeq_epi8(__m128i __A, __m128i __B)
  1065. {
  1066.   return (__m128i) __builtin_ia32_pcomeqb ((__v16qi)__A, (__v16qi)__B);
  1067. }
  1068.  
  1069. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  1070. _mm_comneq_epi8(__m128i __A, __m128i __B)
  1071. {
  1072.   return (__m128i) __builtin_ia32_pcomneqb ((__v16qi)__A, (__v16qi)__B);
  1073. }
  1074.  
  1075. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  1076. _mm_comfalse_epi8(__m128i __A, __m128i __B)
  1077. {
  1078.   return (__m128i) __builtin_ia32_pcomfalseb ((__v16qi)__A, (__v16qi)__B);
  1079. }
  1080.  
  1081. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  1082. _mm_comtrue_epi8(__m128i __A, __m128i __B)
  1083. {
  1084.   return (__m128i) __builtin_ia32_pcomtrueb ((__v16qi)__A, (__v16qi)__B);
  1085. }
  1086.  
  1087. /*pcom (integer, signed words) */
  1088.  
  1089. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  1090. _mm_comlt_epi16(__m128i __A, __m128i __B)
  1091. {
  1092.   return (__m128i) __builtin_ia32_pcomltw ((__v8hi)__A, (__v8hi)__B);
  1093. }
  1094.  
  1095. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  1096. _mm_comle_epi16(__m128i __A, __m128i __B)
  1097. {
  1098.   return (__m128i) __builtin_ia32_pcomlew ((__v8hi)__A, (__v8hi)__B);
  1099. }
  1100.  
  1101. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  1102. _mm_comgt_epi16(__m128i __A, __m128i __B)
  1103. {
  1104.   return (__m128i) __builtin_ia32_pcomgtw ((__v8hi)__A, (__v8hi)__B);
  1105. }
  1106.  
  1107. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  1108. _mm_comge_epi16(__m128i __A, __m128i __B)
  1109. {
  1110.   return (__m128i) __builtin_ia32_pcomgew ((__v8hi)__A, (__v8hi)__B);
  1111. }
  1112.  
  1113. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  1114. _mm_comeq_epi16(__m128i __A, __m128i __B)
  1115. {
  1116.   return (__m128i) __builtin_ia32_pcomeqw ((__v8hi)__A, (__v8hi)__B);
  1117. }
  1118.  
  1119. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  1120. _mm_comneq_epi16(__m128i __A, __m128i __B)
  1121. {
  1122.   return (__m128i) __builtin_ia32_pcomneqw ((__v8hi)__A, (__v8hi)__B);
  1123. }
  1124.  
  1125. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  1126. _mm_comfalse_epi16(__m128i __A, __m128i __B)
  1127. {
  1128.   return (__m128i) __builtin_ia32_pcomfalsew ((__v8hi)__A, (__v8hi)__B);
  1129. }
  1130.  
  1131. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  1132. _mm_comtrue_epi16(__m128i __A, __m128i __B)
  1133. {
  1134.   return (__m128i) __builtin_ia32_pcomtruew ((__v8hi)__A, (__v8hi)__B);
  1135. }
  1136.  
  1137. /*pcom (integer, signed double words) */
  1138.  
  1139. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  1140. _mm_comlt_epi32(__m128i __A, __m128i __B)
  1141. {
  1142.   return (__m128i) __builtin_ia32_pcomltd ((__v4si)__A, (__v4si)__B);
  1143. }
  1144.  
  1145. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  1146. _mm_comle_epi32(__m128i __A, __m128i __B)
  1147. {
  1148.   return (__m128i) __builtin_ia32_pcomled ((__v4si)__A, (__v4si)__B);
  1149. }
  1150.  
  1151. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  1152. _mm_comgt_epi32(__m128i __A, __m128i __B)
  1153. {
  1154.   return (__m128i) __builtin_ia32_pcomgtd ((__v4si)__A, (__v4si)__B);
  1155. }
  1156.  
  1157. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  1158. _mm_comge_epi32(__m128i __A, __m128i __B)
  1159. {
  1160.   return (__m128i) __builtin_ia32_pcomged ((__v4si)__A, (__v4si)__B);
  1161. }
  1162.  
  1163. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  1164. _mm_comeq_epi32(__m128i __A, __m128i __B)
  1165. {
  1166.   return (__m128i) __builtin_ia32_pcomeqd ((__v4si)__A, (__v4si)__B);
  1167. }
  1168.  
  1169. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  1170. _mm_comneq_epi32(__m128i __A, __m128i __B)
  1171. {
  1172.   return (__m128i) __builtin_ia32_pcomneqd ((__v4si)__A, (__v4si)__B);
  1173. }
  1174.  
  1175. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  1176. _mm_comfalse_epi32(__m128i __A, __m128i __B)
  1177. {
  1178.   return (__m128i) __builtin_ia32_pcomfalsed ((__v4si)__A, (__v4si)__B);
  1179. }
  1180.  
  1181. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  1182. _mm_comtrue_epi32(__m128i __A, __m128i __B)
  1183. {
  1184.   return (__m128i) __builtin_ia32_pcomtrued ((__v4si)__A, (__v4si)__B);
  1185. }
  1186.  
  1187. /*pcom (integer, signed quad words) */
  1188.  
  1189. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  1190. _mm_comlt_epi64(__m128i __A, __m128i __B)
  1191. {
  1192.   return (__m128i) __builtin_ia32_pcomltq ((__v2di)__A, (__v2di)__B);
  1193. }
  1194.  
  1195. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  1196. _mm_comle_epi64(__m128i __A, __m128i __B)
  1197. {
  1198.   return (__m128i) __builtin_ia32_pcomleq ((__v2di)__A, (__v2di)__B);
  1199. }
  1200.  
  1201. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  1202. _mm_comgt_epi64(__m128i __A, __m128i __B)
  1203. {
  1204.   return (__m128i) __builtin_ia32_pcomgtq ((__v2di)__A, (__v2di)__B);
  1205. }
  1206.  
  1207. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  1208. _mm_comge_epi64(__m128i __A, __m128i __B)
  1209. {
  1210.   return (__m128i) __builtin_ia32_pcomgeq ((__v2di)__A, (__v2di)__B);
  1211. }
  1212.  
  1213. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  1214. _mm_comeq_epi64(__m128i __A, __m128i __B)
  1215. {
  1216.   return (__m128i) __builtin_ia32_pcomeqq ((__v2di)__A, (__v2di)__B);
  1217. }
  1218.  
  1219. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  1220. _mm_comneq_epi64(__m128i __A, __m128i __B)
  1221. {
  1222.   return (__m128i) __builtin_ia32_pcomneqq ((__v2di)__A, (__v2di)__B);
  1223. }
  1224.  
  1225. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  1226. _mm_comfalse_epi64(__m128i __A, __m128i __B)
  1227. {
  1228.   return (__m128i) __builtin_ia32_pcomfalseq ((__v2di)__A, (__v2di)__B);
  1229. }
  1230.  
  1231. extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  1232. _mm_comtrue_epi64(__m128i __A, __m128i __B)
  1233. {
  1234.   return (__m128i) __builtin_ia32_pcomtrueq ((__v2di)__A, (__v2di)__B);
  1235. }
  1236.  
  1237. /* FRCZ */
  1238. extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  1239. _mm_frcz_ps (__m128 __A)
  1240. {
  1241.   return (__m128) __builtin_ia32_frczps ((__v4sf)__A);
  1242. }
  1243.  
  1244. extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  1245. _mm_frcz_pd (__m128d __A)
  1246. {
  1247.   return (__m128d) __builtin_ia32_frczpd ((__v2df)__A);
  1248. }
  1249.  
  1250. extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  1251. _mm_frcz_ss (__m128 __A, __m128 __B)
  1252. {
  1253.   return (__m128) __builtin_ia32_frczss ((__v4sf)__A, (__v4sf)__B);
  1254. }
  1255.  
  1256. extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  1257. _mm_frcz_sd (__m128d __A, __m128d __B)
  1258. {
  1259.   return (__m128d) __builtin_ia32_frczsd ((__v2df)__A, (__v2df)__B);
  1260. }
  1261.  
  1262. #endif /* __SSE5__ */
  1263.  
  1264. #endif /* _BMMINTRIN_H_INCLUDED */
  1265.